package com.fulin.leetcode;

/**
 * @Description 字符串中最长不重复子串问题,解法：滑动窗口算法
 * @Author fulin16
 * @Date 2020/10/13 16:31
 **/
public class Num3 {

    public static void main(String[] args) {
        Num3 n = new Num3();
        System.out.println(n.lengthOfLongestSubstring("abcdehiabcdefg"));
    }

    //滑动窗口的解法
    private int lengthOfLongestSubstring(String s){
        char[] set = new char[256];
        int end = 0,count = 0,len = s.length();//after是窗口的后指针,count是当前的最长不重复子串
        for(int begin = 0;begin < len; begin ++){
            if(begin != 0){
                set[s.charAt(begin-1)] = 0; //窗口开始位置向右移动的时候去除原来窗口中的元素
            }
            while(end < len && set[s.charAt(end)] == 0){
                set[s.charAt(end)] = 1;
                ++ end;
            }
            count = Math.max(count,end - begin);
        }
        return count;
    }
}
